package com.lin.promise;

import io.netty.util.concurrent.DefaultEventExecutor;
import io.netty.util.concurrent.Promise;

public class PromiseFuture {
	public static void main(String[] args) {
		final DefaultEventExecutor wang = new DefaultEventExecutor();
		final DefaultEventExecutor li = new DefaultEventExecutor();
		
		wang.submit(() -> {
			System.out.println(Thread.currentThread().getName() +  ": Simple Calculate");
		});

		// 小王执行计算
		wang.submit(() -> {
			// Promise接口继承Netty的Future接口，是一个特殊的可写的future
			// 用来设置操作结果
			Promise<Integer> promise = wang.newPromise();

			// 通过promise设置监听，计算完成后对结果的操作
			promise.addListener(future -> {
				System.out.println(Thread.currentThread().getName() + ": Complex Calculate Complete ->" + promise.get());
			});

			// 将复杂的计算交给小李，计算完成后通知小王
			li.submit(() -> {
				System.out.println(Thread.currentThread().getName() + ": Complex Complete");
				// 计算完成，设置小王的promise，通知小王进行处理结果
				promise.setSuccess(10);
			});
		});
	}
}
